package com.ruoyi.purchase.mapper;

import com.ruoyi.product.domain.Product;
import com.ruoyi.product.domain.ProductModel;
import com.ruoyi.purchase.domain.PurchaseModel;
import com.ruoyi.purchase.domain.PurchaseOrder;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Mapper
public interface PurchaseOrderMapper {
    /**
     * 查询采购订单
     *
     * @param purchaseOrder 查询条件
     * @return 结果
     */
    List<PurchaseOrder> selectPurchaseOrderList(PurchaseOrder purchaseOrder);

    /**
     * 添加采购订单 基本信息
     *
     * @param purchaseOrder 添加信息
     * @return 结果
     */
    Long insertPurchaseOrder(PurchaseOrder purchaseOrder);

    /**
     * 添加采购订单 规格信息
     *
     * @param purchaseOrder 添加信息
     * @return 结果
     */
    void insertPurchaseModel(PurchaseOrder purchaseOrder);

    /**
     * 复制采购订单 规格信息
     *
     * @param purchaseModel 添加信息
     * @return 结果
     */
    void copyPurchaseModel(PurchaseModel purchaseModel);

    /**
     * 删除采购订单 基础信息
     *
     * @param purchaseId 需要删除的主键
     * @return 结果
     */
    int deletePurchaseOrderById(Long purchaseId);

    /**
     * 删除采购订单 规格型号信息
     *
     * @param purchaseId 需要删除的主键
     * @return 结果
     */
    int deletePurchaseModelById(List<Long> purchaseId);

    /**
     * 查询采购订单基础信息
     *
     * @param purchaseId 采购订单主键
     * @return 结果
     */
    PurchaseOrder selectPurchaseOrderById(Long purchaseId);

    /**
     * 查询采购订单基础信息
     *
     * @param map 采购订单主键
     * @return 结果
     */
    PurchaseOrder selectPurchaseOrderByMaps(Map map);

    /**
     * 查询采购订单规格型号信息
     *
     * @param purchaseId 采购订单主键
     * @return 结果
     */
    List<PurchaseModel> selectPurchaseModelById(Long purchaseId);

    /**
     * 查询采购订单规格型号信息
     *
     * @param purchaseId 采购订单主键
     * @return 结果
     */
    List<PurchaseModel> selectPurchaseModelByIds(Long purchaseId);

    /**
     * 修改采购订单基础信息
     *
     * @param purchaseOrder 采购订单信息
     * @return 结果
     */
    int updatePurchaseOrder(PurchaseOrder purchaseOrder);

    /**
     * 修改采购订单规格型号信息
     *
     * @param purchaseModel 采购订单信息
     * @return 结果
     */
    int updatePurchaseModel(PurchaseModel purchaseModel);

    /**
     * 查询 需要删除的 采购订单规格型号 的主键
     *
     * @param purchaseId 采购订单主键
     * @return 结果
     */
    List<Long> selectPurchaseOrderByIds(Long purchaseId);

    /**
     * 查询供应商下的所有产品
     *
     * @param deptId 公司主键
     * @return 结果
     */
    List<Product> selectProduct(Long deptId);

    /**
     * 查询供应商下的所有产品  模糊查询
     *
     * @return
     */
    List<Product> selectProducts(Map map);

    /**
     * 查询供应商下的所有产品 弹窗页面
     *
     * @return
     */
    List<Product> selectProductList(Product product);

    /**
     * 查询供应商下的所有产品 弹窗页面
     *
     * @return
     */
//    List<ProductModel> selectProductLists(List<Long> modelNos);
    List<ProductModel> selectProductLists(Product product);

    /**
     * 查询所有产品下的产品规格
     *
     * @param productId 产品主键
     * @return 结果
     */
    List<ProductModel> selectProductModel(Long productId);

    /**
     * 查询出符合条件的 订单
     *
     * @param purchase 查询条件
     * @return 结果
     */
    List<PurchaseOrder> selectPurchaseOrderNumList(Map<String, Object> purchase);

    /**
     * 修改时插入采购订单规格信息
     *
     * @param model 规格信息
     */
    void insertPurchaseModels(PurchaseModel model);

    /**
     * 查询未审核采购订单
     *
     * @param purchaseOrder 查询条件
     * @return 结果
     */
    List<PurchaseOrder> selectPurchaseSupplier(PurchaseOrder purchaseOrder);

    /**
     * 查询采购订单详情
     *
     * @param hashMap
     * @return
     */
    PurchaseOrder selectPurchaseOrderByMap(HashMap<String, Object> hashMap);


    /**
     * 根据 ModelCode查询 最新订单的价格
     */
    List<BigDecimal> selectSaleorderNewPrice(HashMap hashMap);

    /**
     * 修改采购订单的采购合同
     *
     * @param purchaseOrder1 修改的数据
     * @return 结果
     */
    int updatePurchasePdf(PurchaseOrder purchaseOrder1);

    /**
     * 根据条件查询需要删除的主键id
     *
     * @param map1 查询条件
     * @return 结果
     */
    List<Long> selectDeleteProduct(Map<String, Object> map1);

    /**
     * 修改采购订单是否生成销售订单
     *
     * @param purchaseOrder 需要修改的条件
     */
    void updatePurchaseOrderIsCreateSale(PurchaseOrder purchaseOrder);

    /**
     * 通过产品规格型号的主键查询产品子集数据
     *
     * @param modelId 产品子表主键
     * @return 结果
     */
    PurchaseModel selectPurchaseModelByModelId(Long modelId);

    List<PurchaseOrder> selectPurchaseOrderByPurchaseNum(PurchaseOrder params);

    Long querypreviousId(Map<String, Object> params);
    Long queryNextId(Map<String, Object> params);

    List<Map<String, Object>> pendingReview(@Param("deptID") Long deptID);
}
